\documentclass[a4paper,10pt,titlepage]{article}
\usepackage[left=2cm,right=2cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[english]{babel}
\usepackage[colorlinks=true, linkcolor=cyan]{hyperref}
\usepackage{graphicx}
\usepackage{minted}

\title{TDT4190 - Praktisk oppgave 1}
\author{Lars Martin S. Pedersen}

\begin{document}
\maketitle
\tableofcontents
\section{Løsning}
\paragraph{}Vi ønsker å omgjøre et tradisjonelt \textit{Tic Tac Toe}-spill til
et som kan spilles over nettverk, v.h.a. RMI\footnote{Remote Method Invocation}. Til dette
benyttes Java innebygde mellomvare for håndtering av RMI. Det er i tillegg
spesifisert i krav til løsning at brettet ikke skal deles mellom spillerne, men
at man heller skal gi beskjed om at et trekk gjøres og koordinatene til disse.
En kjøring av programmet skal kunne være både tjener og klient, avhengig av om
kjøringen ble startet før motstanderen eller ikke. 
\subsection{TTTRmi og TTTRmiImpl}Delløsningen utvides med ett interface og en klasse, henholdsvis
\textit{TTTRmi} og \textit{TTTRmiImpl}, der førstnevnte spesifiserer følgende
metoder:
\begin{itemize}
  \item \mint{java}|public String connect(String name, char mark, TTTRmi opponent) throws RemoteException|
  \begin{itemize}
	\item Kobler til en opprettet tjener. Returnerer navnet på motstanderen.
  \end{itemize}
  \item \mint{java}|public void mark(int x, int y) throws RemoteException|
  \begin{itemize}
    \item Gir motstanderen beskjed om at ei rute har blitt merket.
  \end{itemize}
  \item \mint{java}|public void reset() throws RemoteException|
  \begin{itemize}
	\item Gir motstanderen beskjed om at brettet blir tømt og det opprettes et nytt spill.
  \end{itemize}	
  \item \mint{java}|public void disconnect() throws RemoteException|
  \begin{itemize}
  	\item Kobler fra motstanderen og avslutter spillet.
  \end{itemize}
  \item \mint{java}|public void notifyVictory() throws RemoteException|
  \begin{itemize}
  	\item Gir motstanderen beskjed om at du har vunnet.
  \end{itemize}
\end{itemize}

\newpage
\subsection{TicTacToeGui}
Videre har undernevnte metoder i \textit{TicTacToeGui.java} blitt modifisert:
\begin{itemize}
  \item \mint{java}|public void squareClicked(int row, int column)|
  \begin{itemize}
    \item Forteller motstanderen hvilken rute som ble markert og kaller \verb|isVictory{int, int, char}| for å se om trekket er vinnende. 
  \end{itemize}
  \item \mint{java}|public void newGame()|
  \begin{itemize}
    \item Kaller \verb|TTTRmiImpl.reset()| for å gjøre motstanderen oppmerksom på at et nytt spill startes.
  \end{itemize}
  \item \mint{java}|public void quit()|
  \begin{itemize}
    \item Kaller \verb|TTTRmiImpl.disconnect()| for å fortelle motstanderen at spillet avsluttes. 
    Hvis kallende instans av programmet er tjener, gjøres også en \verb|Naming.unBind(String)|.
  \end{itemize}
  \item \mint{java}|public void init(String address)|
  \begin{itemize}
    \item Initialiserer klient og tjener, avhengig av om det finnes en tjener fra før eller ei. Gjør et \textit{lookup}-kall mot adresse-parameteret for å sette motstander.
    Dersom kallet returnerer \verb|null| opprettes en tjener v.h.a. \verb|TTTRmiImpl.bind(String)|, hvis ikke kalles \verb|TTTRmiImpl.connect(String, char, TTTRmi)| og klienten
    kobler til.
  \end{itemize}
  \item \mint{java}|private boolean isVictory(int row, int column, char mark)|
  \begin{itemize}
    \item Gjør et naivt søk i hele brettet etter fem på rad av \verb|mark| i alle fire retninger\footnote{Horisontalt, vertikalt og to ganger diagonalt.}.
  \end{itemize}
\end{itemize}
\end{document}